package com.atguigu.gulimall.coupon;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;


/**
 *   1. 如何使用nacos 作为配置中心统一管理配置
 * 		1.1 引入依赖
 * 		1.2  创建一个 bootstrap.properties
 * 			添加
 * 			spring.application.name=gulimall-coupon
 * 			spring.cloud.nacos.config.server-addr=127.0.0.1:8848
 *		1.3 需要给配置中心默认添加一个叫 数据集（Data Id) gulimall-coupon.properties . 默认
 *			规则， 应用名.properties
 *
 *		1.4 给应用名.properties 中添加任何配置
 *
 *		1.5 动态获取配置
 * 			@RefreshScope   动态获取并刷新配置
 * 			@Value("${配置项的名}")	获取到配置
 * 			如果配置中心和当前应用的配置文件都配置了额相同的项， 优先使用配置中心的配置
 *
 *   2.细节
 *   	命名空间  (默认 public 保留空间） 默认新增的所有配置都在public 空间下
 *   		1. 开发，测试，生产： 利用命名空间来做环境隔离
 *   		注意： 在bootstrap.properties 配置上， 需要使用那个命名空间下的配置
 *   			spring.cloud.nacos.config.namespace=29f8544d-4d26-462e-ae67-86e65d8b5330
 *   	    2. 每一个微服务之间互相隔离配置， 每一个微服务都创建自己的命名空间， 只加载自己命名空间下的所有配置
 *
 *   		用于进行租户粒度的配置隔离。不同的命名空间下， 可以存在相同的Group 或Data Id 的配置，NameSpace 的常用
 *   		场景之一是不同环境的配置的区分隔离，例如开发测试环境合萼生产环境的资源（如配置，服务）隔离等。
 *   	配置集
 *   		一组相关或者不相关的配置项的集合称为 配置集。 在系统中， 一个配置文件通常就是一个配置集，包含了系统各个方面
 *   		的配置。例如： 一个配置集可能包含了数据源，线程池，日志级别等配置项
 *   	配置集ID
 *   		Nacos 中的E某个配置集的ID. 配置集ID 是组织划分配置的维度之一。 Data ID 通常用于组织划分系统的配置集。 一个
 *   		系统或者应用可以包含多个配置集，每个配置集都可以被一个有意义的E名称标识。 Data Id 通常采用类 java 包（如
 *   		com.taobao.tc.refund.log.level) 的命名规则保证全局唯一性。 此命名规则非常强
 *		配置分组
 *			默认所有的配置集都属于： DEFAULT_GROUP
 *			Nacos 中的一组配置集， 是组织配置的维度之一。通过一个有意义的字符串，(如 buy或者 trade)对配置集进行分组，从而
 *			区分DataId 相同的配置集。当您在Nacos 上创建一个配置时，如果未填写配置分组的名称，则配置分组的名称默认采用DEEFAULT_GROUP
 *		    配置分组常见的场景： 不同德尔应用或组件使用了相同的配置类型。如 database_url 配置和
 *
 * 	3. 同时加载多个配置集
 * 		1. 微服务任何配置信息，任何配置文件都可以放在配置中心中
 * 		2. 只需要在bootstrap.properties 说明加载配置中心哪些配置文件即可。
 * 		3. @Value @ConfigurationProperties 。。。
 * 			以前SpringBoot 任何方法从配置文件中获取值，都能使用
 * 			配置中心有的，优先使用配置中心中的。
 *
 *  优惠服务
 *
 *  本项目使用：
 *  	每个微服务创建自己的命名空间， 使用配置分组区分环境， dev, test, prod
 *
 */
@RefreshScope
@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimall.coupon.dao")
@SpringBootApplication
public class CouponApplication {

	public static void main(String[] args) {
		//
		SpringApplication.run(CouponApplication.class, args);
	}

}
